//
//  EcgParamObj.m
//  sr01sdkProject
//
//  Created by  on 2024/3/5.
//  Used for ecg measurement function startup parameter settings

#import "CAEcgParamObj.h"

@implementation CAEcgParamObj


// 使用设备算法的下发参数
+(CAEcgParamObj *)defaultLocalAlgorithemParam
{
    CAEcgParamObj *param = [[CAEcgParamObj alloc]init];
    
    param->_clockSource =     CA_ECG_CLOCK_SRC_32768;
    param->_sampleRate =     CA_ECG_SR_SPR_IDX_512;
    param->_ecgPgaGain =     CA_ECG_PGA_GAIN_2;
    param->_ppdLedx =  CA_PPG_LED2_IR;
    param->_ppdCurrent = CA_PPG_CURRENT_10;
    [param chooseDeviceGain];

    
    return param;
}

// 使用网络计算ecg
+(CAEcgParamObj *)defaultNetAlgorithemParam
{
    // 采样率 500hz
    CAEcgParamObj *param = [[CAEcgParamObj alloc]initWithClock32000:    CA_ECG_SR_SPR_IDX_500];
    
    param.isRowWave = YES;
//    param->_clockSource = ECG_CLOCK_SRC_32768;
//    param->_sampleRate = ECG_SR_SPR_IDX_512;
//    param->_ecgPgaGain = ECG_PGA_GAIN_2;
//    param->_ppdLedx =  PPG_LED2_IR;
//    param->_ppdCurrent = PPG_CURRENT_10;
//    [param chooseDeviceGain];

    
    return param;
}

/*
 SampleRate:(uint16_t)sampleRate InnerClockSource:(uint8_t)clockSource EcgPgaGain:(uint8_t)ecgPgaGain
 */
- (instancetype)initWithClock32768:(CA_ECG_SR_SPRATE_CLK32768)sampleRate
{
    self = [super init];
    if (self) {
        _clockSource =     CA_ECG_CLOCK_SRC_32768;
        _sampleRate = sampleRate;//[self chooseSr32768:sampleRate];
        _ecgPgaGain =     CA_ECG_PGA_GAIN_2;
        _ppdLedx =  CA_PPG_LED2_IR;
        _ppdCurrent = CA_PPG_CURRENT_10;
        [self chooseDeviceGain];

    }
    return self;
}

- (instancetype)initWithClock32000:(CA_ECG_SR_SPRATE_CLK32000)sampleRate
{
    self = [super init];
    if (self) {
        _clockSource =     CA_ECG_CLOCK_SRC_32000;
        _sampleRate = sampleRate;//[self chooseSr32000:sampleRate];
        _ecgPgaGain =     CA_ECG_PGA_GAIN_2;
        
        _ppdLedx =  CA_PPG_LED2_IR;
        _ppdCurrent = CA_PPG_CURRENT_10;
        [self chooseDeviceGain];
    }
    return self;
}

-(void)chooseDeviceGain {
    
    NSArray<NSNumber *> *yGainArray = @[
        @(1*20.0f),
        @(2*20.0f),
        @(4*20.0f),//
        @(8*20.0f),// 3
        
        @(4*20.0f),// 4
        @(4*20.0f),// 5
        @(4*20.0f),// 6
        
        @(16*20.0f),// 7
    ];
    
    _deviceYgain = yGainArray[_ecgPgaGain].floatValue;
    
}
//-(uint16_t)chooseSr32768:(ECG_SR_CLK32768)sampleRate
//{
//    uint16_t sr = 512;
//    switch (sampleRate) {
//        case  ECG_SR_CLK32768_512 : // default
//        {
//            sr = 512;
//        }
//            break;
//        case  ECG_SR_CLK32768_2048:
//        {
//            sr = 2048;
//        }
//            break;
//        case  ECG_SR_CLK32768_1024:
//        {
//            sr = 1024;
//        }
//            break;
//        case ECG_SR_CLK32768_256:
//        {
//            sr = 256;
//        }
//            break;
//        case  ECG_SR_CLK32768_128:
//        {
//            sr = 128;
//        }
//            break;
//        case  ECG_SR_CLK32768_64:
//        {
//            sr = 64;
//        }
//            break;
//            
//        default:
//            break;
//    }
//    
//    return sr;
//    
//}
//
//-(uint16_t)chooseSr32000:(ECG_SR_CLK32000)sampleRate
//{
//    uint16_t sr = 500;
//    switch (sampleRate) {
//        case ECG_SR_CLK32768_500 : // default
//        {
//            sr = 500;
//        }
//            break;
//            
//        case ECG_SR_CLK32768_2000:
//        {
//            sr = 2000;
//        }
//            break;
//            
//        case ECG_SR_CLK32768_1000:
//        {
//            sr = 1000;
//        }
//            break;
//            
//        case ECG_SR_CLK32768_250:
//        {
//            sr = 250;
//        }
//            break;
//            
//        case ECG_SR_CLK32768_126:
//        {
//            sr = 126;
//        }
//            break;
//            
//        case ECG_SR_CLK32768_62_5:
//        {
//            sr = 63;
//        }
//            break;
//            
//            
//        default:
//            break;
//    }
//    
//    return sr;
//}


//-(uint16_t)sampleRate
//{
//    return _sampleRate;
//}

//-(CGFloat)transWaveToVol:(CGFloat)wave IsRow:(BOOL)isRow {
//    CGFloat vol =0;
//    
//    if (_deviceYgain == 0) {
//        return 0;
//    }
//    
//    if (isRow) { // 原始波形
//        // 原始波形 三字节
//       vol = wave  * 1000 / (131072 * _deviceYgain);//电压
//        
//    }
//    if (!isRow) {
//        // 设备滤波波形 2字节
////        vol = wave  * 1000 / (32768 * _deviceYgain);//电压
//        vol = wave  / 1000.f;// 协议2.8
//    }
//    return vol;
//}

-(CGFloat)transWaveToVol:(CGFloat)wave {
    CGFloat vol =0;
    
    if (_deviceYgain == 0) {
        return 0;
    }
    
    if (self.disp_src == 0 || self.disp_src == 2) { // 原始波形
        // 原始波形 三字节
       vol = wave  * 1000 / (131072 * _deviceYgain);//电压
        
    }
    if (self.disp_src == 1) {
        // 设备滤波波形 2字节
//        vol = wave  * 1000 / (32768 * _deviceYgain);//电压
        vol = wave  / 1000.f;// 协议2.8
    }
    return vol;
}

-(CA_ECG_SR_SPRATE_CLK32768)sampleRateWhenSrc32768
{
    if (_clockSource !=     CA_ECG_CLOCK_SRC_32768) {
        return 0;
    }
    return _sampleRate;
}
-(CA_ECG_SR_SPRATE_CLK32000)sampleRateWhenSrc32000
{
    if (_clockSource !=     CA_ECG_CLOCK_SRC_32000) {
        return 0;
    }
    return _sampleRate;
}

-(CA_ECG_CLOCK_SRC)clockSource
{
    return _clockSource;
}

-(CA_ECG_PGA_GAIN)ecgPgaGainIdx
{
    return _ecgPgaGain;
}

-(uint8_t)ppdLedx  // 灯
{
    return _ppdLedx;
}
-(uint8_t)ppdCurrent // 测量电流
{
    return _ppdCurrent;
}

//-(CGFloat)transWaveToVol:(CGFloat)wave {
//    CGFloat vol =0;
//    
//    if (_deviceYgain == 0) {
//        return 0;
//    }
//    
//    if (self.isRowWave) { // 原始波形
//        // 原始波形 三字节
//       vol = wave  * 1000 / (131072 * _deviceYgain);//电压
//    }
//    if (!self.isRowWave) {
//        // 设备滤波波形 2字节
//        vol = wave  * 1000 / (32768 * _deviceYgain);//电压
//        
//    }
//    return vol;
//}

@end
